package com.example.voluntary.service;

import com.example.common.domain.PageResult;
import com.example.voluntary.domain.dto.ActivityAuditDTO;
import com.example.voluntary.domain.dto.ActivityQueryDTO;
import com.example.voluntary.domain.dto.VoluntarySearchDTO;
import com.example.voluntary.domain.dto.VolunteerActivitiesDTO;
import com.example.voluntary.domain.vo.*;
import com.google.zxing.WriterException;

import java.io.IOException;
import java.util.List;

public interface VolunteerActivitiesService {
    /**
     * 创建志愿活动
     * @param volunteerActivitiesDTO
     */
    void createVoluntary(VolunteerActivitiesDTO volunteerActivitiesDTO);

    /**
     * 获取志愿活动列表
     * @param pageNum
     * @param size
     * @return
     */
    PageResult<VoluntaryVO> getVoluntaryList(Integer pageNum, Integer size);

    /**
     * 添加参加记录
     * @param activityId 活动id
     */
    void addParticipation(Integer activityId);

    /**
     * 获取活动详细信息
     * @param activityId 活动id
     * @return 活动详细信息
     */
    ActivityDetailVO getActivityDetail(Integer activityId);

    PageResult<VoluntaryVO> searchVolunteerActivity(VoluntarySearchDTO searchDTO);

    /**
     * 同步所有志愿活动到Elasticsearch
     */
    void syncVolunteerActivitiesToElasticsearch();

    /**
     * 获取志愿活动管理列表
     * @param queryDTO 查询参数
     * @return 志愿活动管理列表
     */
    PageResult<VoluntaryManagementVO> getVoluntaryManagementList(ActivityQueryDTO queryDTO);

    /**
     * 审核志愿活动
     * @param auditDTO 审核参数
     */
    void auditVoluntaryActivity(ActivityAuditDTO auditDTO) throws IOException, WriterException;

    /**
     * 回显审核数据
     * @param activityId 活动id
     * @return 审核数据
     */
    AuditVO getAudit(Integer activityId);

    /**
     * 签到或者签退
     * @param activityId
     */

    void signInOrSignOut(Integer activityId);

    void deleteElasticsearchData(String indexName);

    /**
     * 获取用户创建的志愿活动
     * @return 志愿活动列表
     */
    List<CreatedActivityVO> getMyCreatedActivities();

    /**
     * 获取用户参加的志愿活动
     * @return 志愿活动列表
     */
    List<ParticipatedActivityVO> getMyParticipatedActivities();
}
